package com.woniuxy.jdkproxy;

import com.woniuxy.aspect.MyAspect;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author: zhouhongcheng
 * Date: 2022/1/20:12:07
 * Description:JDK代理工厂
 */
public class JdkProxyFactory {
    /*/*
     * Description : 通过该工厂，创建一个代理类(已经被代理好了的类)，并返回代理类！
     * ChangeLog : 1. 创建 (2022/1/20 12:08 [zhouhongcheng]); 
     ** @param targetClass  
     * *  @return java.lang.Object
    */
    public static  Object getProxyObject(Object targetClass){
        //匿名内部类
        return Proxy.newProxyInstance(targetClass.getClass().getClassLoader(), targetClass.getClass().getInterfaces(),
                    (proxy, method, args) -> {
                    //前置增强
                    MyAspect myAspect = new MyAspect();
                    myAspect.beforeLog();
                    //目标方法
                    Object invoke = method.invoke(targetClass, args);
                    myAspect.afterLog();
                    return invoke;
                });
    }
}
